home *** CD-ROM | disk | FTP | other *** search
/ Freelog 117 / FreelogNo117-OctobreNovembre2013.iso / Programmation / jedit / jedit5.1.0install.exe / {app} / macros / Emacs / EmacsUtil.bsh < prev    next >
Text File  |  2013-07-28  |  6KB  |  302 lines

  1. /**
  2. * Utility methods for Emacs emulation macros.
  3. */
  4.  
  5. import org.gjt.sp.jedit.Registers;
  6. import org.gjt.sp.gui.HistoryModel;
  7.  
  8. boolean repeatingSameMacro (String macroName)
  9. {
  10.     ih = textArea.getInputHandler();
  11.     lastAction = ih.getLastAction();
  12.     lastActionCount = ih.getLastActionCount();
  13.     
  14.     // When called from within a macro, the last action will be that macro.
  15.     // But, if the last action count is greater than 1, then it's a repeat.
  16.  
  17.     boolean repeat = false;
  18.     if ( (lastAction.getName().equals (macroName)) && (lastActionCount > 1) )
  19.         repeat = true;
  20.     
  21.     return repeat;
  22. }
  23.  
  24. String lineAt (int i)
  25. {
  26.     StringBuffer buf = new StringBuffer();
  27.     
  28.     while (! atEndOfBuffer (i))
  29.     {
  30.         char c = charAt (i);
  31.         buf.append (c);
  32.         if (c == '\n')
  33.             break;
  34.     }
  35.     
  36.     return buf.toString();
  37. }
  38.  
  39. char charAt (int i)
  40. {
  41.     return buffer.getText (i, 1).charAt (0);
  42. }
  43.  
  44. char charAtCaret()
  45. {
  46.     caret = textArea.getCaretPosition();
  47.     return (atEndOfBuffer() ? '\0' : buffer.getText (caret, 1).charAt (0));
  48. }
  49.  
  50. boolean atEndOfBuffer()
  51. {
  52.     return atEndOfBuffer (textArea.getCaretPosition());
  53. }
  54.  
  55. boolean atEndOfBuffer (int caret)
  56. {
  57.     return (caret >= buffer.getLength());
  58. }
  59.  
  60. int eatNonAlphanums()
  61. {
  62.     boolean eat = true;
  63.  
  64.     while (eat)
  65.     {
  66.         ch = charAtCaret();
  67.         
  68.         if (ch == '\n')
  69.         {
  70.             textArea.goToNextLine (false);
  71.             textArea.goToStartOfLine (false);
  72.         }
  73.         
  74.         else
  75.         {
  76.             if (Character.isLetterOrDigit (ch))
  77.                 eat = false;
  78.             
  79.             else
  80.                 textArea.goToNextCharacter (false);
  81.         }
  82.     }
  83.     
  84.     return textArea.getCaretPosition();
  85. }
  86.        
  87. int eatWhitespace()
  88. {
  89.     boolean eat = true;
  90.     
  91.     while (eat)
  92.     {
  93.         ch = charAtCaret();
  94.         
  95.         if (ch == '\n')
  96.         {
  97.             textArea.goToNextLine (false);
  98.             textArea.goToStartOfLine (false);
  99.         }
  100.         
  101.         else if (Character.isWhitespace (ch))
  102.         {
  103.             textArea.goToNextCharacter (false);
  104.         }
  105.  
  106.         else
  107.         {
  108.             eat = false;
  109.         }
  110.     }
  111.     
  112.     return textArea.getCaretPosition();
  113. }
  114.  
  115. int getCardinalProperty (String name, int defaultValue)
  116. {
  117.     int result = jEdit.getIntegerProperty (name, defaultValue);
  118.  
  119.     if (result <= 0)
  120.         result = defaultValue;
  121.     
  122.     return result;
  123. }
  124.  
  125. String makeBufferPropertyName (String prefix)
  126. {
  127.     return makeBufferPropertyName (buffer, prefix);
  128. }
  129.  
  130. String makeBufferPropertyName (Buffer theBuffer, String prefix)
  131. {
  132.     propName = new StringBuffer (prefix);
  133.  
  134.     // Convert any Windows-style file separators to Unix ones, since
  135.     // backslashes are special characters in properties files.
  136.  
  137.     fileSep = System.getProperty ("file.separator");
  138.     if (! fileSep.equals ("/"))
  139.     {
  140.         // Backslash is also special in regular expressions. Since, in theory,
  141.         // the file separator could be *anything*, we check explicitly for
  142.         // backslash here.
  143.  
  144.         if (fileSep.equals ("\\"))
  145.             fileSep = fileSep + "\\";
  146.  
  147.         bufName = theBuffer.getPath().replaceAll (fileSep, "/");
  148.     }
  149.     
  150.     else
  151.     {
  152.         bufName = theBuffer.getPath();
  153.     }
  154.  
  155.     propName.append (bufName);
  156.     return propName.toString();
  157. }
  158.  
  159. int getDefaultWrap()
  160. {
  161.     return getCardinalProperty ("buffer.maxLineLen", 79);
  162. }
  163.  
  164. int getMark (Buffer buffer)
  165. {
  166.     propName = makeBufferPropertyName ("emacs.mark");
  167.     int mark = getCardinalProperty (propName, -1);
  168.     if (mark != -1)
  169.     {
  170.         if (mark >= buffer.getLength())
  171.             mark = buffer.getLength() - 1;
  172.     }
  173.     return mark;
  174. }
  175.  
  176. void setMark (Buffer buffer, int pos)
  177. {
  178.     propName = makeBufferPropertyName (buffer, "emacs.mark");
  179.     jEdit.setTemporaryProperty (propName, String.valueOf (pos));
  180. }
  181.  
  182. void beep()
  183. {
  184.     view.getToolkit().beep();
  185. }
  186.  
  187. Selection getKillRegion()
  188. {
  189.     // If there's a selection, use it instead.
  190.  
  191.     int caret = textArea.getCaretPosition();
  192.     Selection selection = textArea.getSelectionAtOffset (caret);
  193.     if (selection == null)
  194.     {
  195.         int mark = getMark (buffer);
  196.         if (mark == -1)
  197.         {
  198.             beep();
  199.             return null;
  200.         }
  201.  
  202.         selection = new Selection.Range (Math.min (caret, mark),
  203.                                          Math.max (caret, mark));
  204.         textArea.setSelection (selection);
  205.     }
  206.  
  207.     return selection;
  208. }
  209.  
  210. Registers.Register getClipboard()
  211. {
  212.     return Registers.getRegister ('$');
  213. }
  214.  
  215. void setClipboard (String string)
  216. {
  217.     Registers.setRegister ('$', string);
  218. }
  219.  
  220. void setClipboard (Selection selection)
  221. {
  222.     setClipboard (textArea.getSelectedText (selection));
  223. }
  224.  
  225. void addToClipboardAndHistory (String string)
  226. {
  227.     // The special register '$' is the clipboard.
  228.  
  229.     setClipboard (string);
  230.     
  231.     // Save the text in the history, too.
  232.     
  233.     HistoryModel.getModel ("clipboard").addItem (string);
  234. }
  235.  
  236. void addToClipboardAndHistory (Selection selection)
  237. {
  238.     addToClipboardAndHistory (textArea.getSelectedText (selection));
  239. }
  240.  
  241. int findEndOfSentence()
  242. {
  243.     caret = textArea.getCaretPosition();
  244.  
  245.     for (;;)
  246.     {
  247.         if (atEndOfBuffer (caret))
  248.             break;
  249.  
  250.         ch = charAt (caret);
  251.         if (ch == '.')
  252.         {
  253.             if (Character.isWhitespace (charAt (caret + 1)))
  254.             {
  255.                 caret++;
  256.                 break;
  257.             }
  258.         }
  259.  
  260.         caret++;
  261.     }
  262.     
  263.     return caret;
  264. }
  265.  
  266. int findBeginningOfSentence()
  267. {
  268.     caret = textArea.getCaretPosition() - 1;
  269.     if (charAt (caret) == '.')
  270.         caret--;
  271.  
  272.     for (;;)
  273.     {
  274.         if (caret <= 0)
  275.             break;
  276.  
  277.         ch = charAt (caret);
  278.         if (ch == '.')
  279.         {
  280.             if (Character.isWhitespace (charAt (caret + 1)))
  281.             {
  282.                 caret++;
  283.                 break;
  284.             }
  285.         }
  286.         
  287.         else if (Character.isUpperCase (ch))
  288.         {
  289.             caret--;
  290.             if (caret <= 0)
  291.                 break;
  292.             if (Character.isWhitespace (charAt (caret)))
  293.                 break;
  294.         }
  295.  
  296.         caret--;
  297.     }
  298.     
  299.     return caret;
  300. }
  301.  
  302.